
    // <h2>订阅(注册)则是被动，发布则是主动</h2>

        //使用立即函数
        var Observe =(function(){
            var message = {}
            return {
                //注册订阅信息模块
                //注册就是订阅者去注册信息！！这是被动的
                register:function(type,fn){
                    //检测有没有这个类型的消息队列
                    //不存在就创建一个该消息类型
                    if (typeof message[type] === 'undefined'){
                        message[type] = [fn]
                    }else{
                        message[type].push(fn)
                    }
                },
                //发布订阅信息模块
                //发布就是观察者去发布信息
                fire:function(type,args){
                    //判断是否有，就遍历，没有就返回
                    if (!message[type]) return
                    //要发布消息就要有发布信息对象，其中包括消息类型和携带消息
                    event = {
                        type:type,
                        args:args
                    }
                    //这里是指消息对应的动作序列的长度，不是message.length
                    for(let i = 0;i<message[type].length;i++){
                      message[type][i].call(this,event)
                    }
                },
                //取消订阅信息模块
                remove:function(type,fn){
                    //需要判断消息队列和动作
                    //判断是否是消息队列，也就是数组，好比二维数组
                    if(message[type] instanceof Array){
                        
                        //从最后一个消息进行遍历
                        for(let i = message[type].length;i>=0;i--){
                            //如果存在该动作！！！！
                          
                            if(message[type][i] == fn){
                                //splice,从i动作开始，删除一个
                                console.log('4')
                                message[type][i].splice(i,1)
                            }
                        }
                    }
                }
            }
        })()
        // //订阅消息->被动触发
        // Observe.register('test',function(e){
        //     console.log(e.args)
        // })
        // //发布消息->主动发布
        // Observe.fire('test',{fn:'happy1'})
        // Observe.fire('test',{fn:'happy2'})
        // Observe.fire('test',{fn:'happy3'})
        // // Observe.remove('test',function(e){
        // //     console.log(e.args)
        // // })
        // console.log(Observe)
